/*
 * Ingresar_resultado.java
 *
 * Created on 10-oct-2008, 16:22:53
 */
package investigaciones_itm.Convocatorias;

import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.webui.jsf.component.AddRemove;
import com.sun.webui.jsf.component.Body;
import com.sun.webui.jsf.component.Form;
import com.sun.webui.jsf.component.Head;
import com.sun.webui.jsf.component.Html;
import com.sun.webui.jsf.component.Link;
import com.sun.webui.jsf.component.Page;
import com.sun.webui.jsf.component.PanelLayout;
import com.sun.webui.jsf.component.Tab;
import com.sun.webui.jsf.component.TabSet;
import com.sun.webui.jsf.model.Option;
import itm.exception.ConvocatoriaException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.FacesException;
import investigaciones_itm.SessionBean1;
import investigaciones_itm.ApplicationBean1;
import investigaciones_itm.RequestBean1;
import itm.bo.convocatorias.ConvocatoriasBO;
import itm.vo.convocatorias.ConvocatoriaVO;
import itm.vo.convocatorias.PostuladosConvocatoriaVO;
import itm.vo.grupoInvestigacion.GrupoInvestigacionVO;
import itm.vo.personas.PersonaVO;
import java.util.ArrayList;
import java.util.List;
import javax.faces.component.html.HtmlCommandButton;
import javax.faces.component.html.HtmlMessages;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlPanelGroup;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @author Administrador
 */
public class Ingresar_resultado_convocatoria extends AbstractPageBean {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private void _init() throws Exception {
        addRemoveList1.setWidth("382");
//        listbox2DefaultOptions.setOptions(new com.sun.webui.jsf.model.Option[]{new com.sun.webui.jsf.model.Option("item1", ""), new com.sun.webui.jsf.model.Option("item2", ""), new com.sun.webui.jsf.model.Option("item3", "")});
//        listbox3DefaultOptions.setOptions(new com.sun.webui.jsf.model.Option[]{new com.sun.webui.jsf.model.Option("item1", "Persona 1"), new com.sun.webui.jsf.model.Option("item2", "Persona 2"), new com.sun.webui.jsf.model.Option("item3", "Persona 3"), new com.sun.webui.jsf.model.Option("value", "Persona 4")});
    }
    private Page page1 = new Page();

    public Page getPage1() {
        return page1;
    }

    public void setPage1(Page p) {
        this.page1 = p;
    }
    private Html html1 = new Html();

    public Html getHtml1() {
        return html1;
    }

    public void setHtml1(Html h) {
        this.html1 = h;
    }
    private Head head1 = new Head();

    public Head getHead1() {
        return head1;
    }

    public void setHead1(Head h) {
        this.head1 = h;
    }
    private Link link1 = new Link();

    public Link getLink1() {
        return link1;
    }

    public void setLink1(Link l) {
        this.link1 = l;
    }
    private Body body1 = new Body();

    public Body getBody1() {
        return body1;
    }

    public void setBody1(Body b) {
        this.body1 = b;
    }
    private Form form1 = new Form();

    public Form getForm1() {
        return form1;
    }

    public void setForm1(Form f) {
        this.form1 = f;
    }
    private HtmlPanelGroup groupPanel1 = new HtmlPanelGroup();

    public HtmlPanelGroup getGroupPanel1() {
        return groupPanel1;
    }

    public void setGroupPanel1(HtmlPanelGroup hpg) {
        this.groupPanel1 = hpg;
    }
    private TabSet tabSet1 = new TabSet();

    public TabSet getTabSet1() {
        return tabSet1;
    }

    public void setTabSet1(TabSet ts) {
        this.tabSet1 = ts;
    }
    private Tab tab1 = new Tab();

    public Tab getTab1() {
        return tab1;
    }

    public void setTab1(Tab t) {
        this.tab1 = t;
    }
    private PanelLayout layoutPanel1 = new PanelLayout();

    public PanelLayout getLayoutPanel1() {
        return layoutPanel1;
    }

    public void setLayoutPanel1(PanelLayout pl) {
        this.layoutPanel1 = pl;
    }
    private AddRemove addRemoveList1 = new AddRemove();

    public AddRemove getAddRemoveList1() {
        return addRemoveList1;
    }

    public void setAddRemoveList1(AddRemove ar) {
        this.addRemoveList1 = ar;
    }
    /** Holds value of property availableOptions. */
    private Option[] availableOptionsSeleccionados = null;
    /** Holds value of property selectedOptions. */
    private String[] selectedOptionsSeleccionados = null;

    public Option[] getAvailableOptionsSeleccionados() {
        return availableOptionsSeleccionados;
    }

    public void setAvailableOptionsSeleccionados(Option[] availableOptionsSeleccionados) {
        this.availableOptionsSeleccionados = availableOptionsSeleccionados;
    }

    public String[] getSelectedOptionsSeleccionados() {
        return selectedOptionsSeleccionados;
    }

    public void setSelectedOptionsSeleccionados(String[] selectedOptionsSeleccionados) {
        this.selectedOptionsSeleccionados = selectedOptionsSeleccionados;
    }
    private HtmlOutputText outputText1 = new HtmlOutputText();

    public HtmlOutputText getOutputText1() {
        return outputText1;
    }

    public void setOutputText1(HtmlOutputText hot) {
        this.outputText1 = hot;
    }
    private HtmlOutputText outputTextIdConvocatoria = new HtmlOutputText();

    public HtmlOutputText getOutputTextIdConvocatoria() {
        return outputTextIdConvocatoria;
    }

    public void setOutputTextIdConvocatoria(HtmlOutputText outputTextIdConvocatoria) {
        this.outputTextIdConvocatoria = outputTextIdConvocatoria;
    }
    private HtmlOutputText outputTextConvocatoria = new HtmlOutputText();

    public HtmlOutputText getOutputTextConvocatoria() {
        return outputTextConvocatoria;
    }

    public void setOutputTextConvocatoria(HtmlOutputText outputTextConvocatoria) {
        this.outputTextConvocatoria = outputTextConvocatoria;
    }
    private HtmlCommandButton buttonInfresarResultados = new HtmlCommandButton();

    public HtmlCommandButton getButtonInfresarResultados() {
        return buttonInfresarResultados;
    }

    public void setButtonInfresarResultados(HtmlCommandButton hcb) {
        this.buttonInfresarResultados = hcb;
    }
    private HtmlCommandButton buttonVolver = new HtmlCommandButton();

    public HtmlCommandButton getButtonVolver() {
        return buttonVolver;
    }

    public void setButtonVolver(HtmlCommandButton hcb) {
        this.buttonVolver = hcb;
    }
    private HtmlMessages messageList1 = new HtmlMessages();

    public HtmlMessages getMessageList1() {
        return messageList1;
    }

    public void setMessageList1(HtmlMessages hm) {
        this.messageList1 = hm;
    }

    // </editor-fold>
    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public Ingresar_resultado_convocatoria() {
    }

    /**
     * <p>Callback method that is called whenever a page is navigated to,
     * either directly via a URL, or indirectly via page navigation.
     * Customize this method to acquire resources that will be needed
     * for event handlers and lifecycle methods, whether or not this
     * page is performing post back processing.</p>
     * 
     * <p>Note that, if the current request is a postback, the property
     * values of the components do <strong>not</strong> represent any
     * values submitted with this request.  Instead, they represent the
     * property values that were saved for this view when it was rendered.</p>
     */
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here

        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("Ingresar_resultado Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
        }

        // </editor-fold>
        // Perform application initialization that must complete
        // *after* managed components are initialized
        // TODO - add your own initialization code here

        convocatoriaVO = new ConvocatoriaVO();
        convocatoriaVO = getRequestBean1().getConvocatoriaVO();
        outputTextIdConvocatoria.setValue(convocatoriaVO.getIdConvocatoria());
        consultarConvInv(convocatoriaVO);

        //convocatoriaId = (String) getRequestAttribute(convocatoriaId);
        //convocatoriaVO.setIdConvocatoria(convocatoriaId);
        //textFieldIdConvocatoria.setValue(convocatoriaVO.getIdConvocatoria());
        //tipoIdConv = (String) convocatoriaVO.getIdTipoConv();
        llenarListaPostulados(convocatoriaVO);
    //consultarConvInv(convocatoriaVO);
    }

    /**
     * <p>Callback method that is called after the component tree has been
     * restored, but before any event processing takes place.  This method
     * will <strong>only</strong> be called on a postback request that
     * is processing a form submit.  Customize this method to allocate
     * resources that will be required in your event handlers.</p>
     */
    @Override
    public void preprocess() {
    }

    /**
     * <p>Callback method that is called just before rendering takes place.
     * This method will <strong>only</strong> be called for the page that
     * will actually be rendered (and not, for example, on a page that
     * handled a postback and then navigated to a different page).  Customize
     * this method to allocate resources that will be required for rendering
     * this page.</p>
     */
    @Override
    public void prerender() {
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called (regardless of whether
     * or not this was the page that was actually rendered).  Customize this
     * method to release resources acquired in the <code>init()</code>,
     * <code>preprocess()</code>, or <code>prerender()</code> methods (or
     * acquired during execution of an event handler).</p>
     */
    @Override
    public void destroy() {
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }
    private ConvocatoriasBO convocatoriasBO;
    private ConvocatoriaVO convocatoriaVO;
    private String convocatoriaId = "";

    private ConvocatoriaVO consultarConvInv(ConvocatoriaVO convocatoriaVO1) {
        try {
            convocatoriasBO = new ConvocatoriasBO();
            convocatoriaVO = new ConvocatoriaVO();
            convocatoriaVO = convocatoriasBO.consultarConvocatoria(convocatoriaVO1);
            outputTextConvocatoria.setValue(convocatoriaVO.getNombreConvocatoria());
        } catch (Exception ce) {
            //error("Error al consultar los datos de la persona.");
            ce.getStackTrace();
        }
        return convocatoriaVO;
    }

    private void llenarListaPostulados(ConvocatoriaVO convocatoriaVO) {
        List<PostuladosConvocatoriaVO> listaPostulados = new ArrayList<PostuladosConvocatoriaVO>();
        PostuladosConvocatoriaVO postulados;
        List<GrupoInvestigacionVO> listaGrupos = new ArrayList<GrupoInvestigacionVO>();
        List<PersonaVO> listaPersonas = new ArrayList<PersonaVO>();
        String idGrupo = "", nombreProyecto = "", nombreGrupo = "", nombrePostulado = "", nombrePersona = "", idPersona = "", idPostulado = "";
        try {
            convocatoriasBO = new ConvocatoriasBO();
            listaGrupos = convocatoriasBO.consultarConvocatoriaGrupo(Long.parseLong(convocatoriaVO.getIdConvocatoria()));
            listaPersonas = convocatoriasBO.consultarConvocatoriaPersona(Long.parseLong(convocatoriaVO.getIdConvocatoria()));
            for (int i = 0; i < listaGrupos.size(); i++) {
                postulados = new PostuladosConvocatoriaVO();
                postulados.setGrupoInvestigacion(listaGrupos.get(i));
                listaPostulados.add(postulados);
            }
            for (int i = 0; i < listaPersonas.size(); i++) {
                postulados = new PostuladosConvocatoriaVO();
                postulados.setPersonas(listaPersonas.get(i));
                listaPostulados.add(postulados);
            }
            if (listaPostulados.size() != 0) {
                availableOptionsSeleccionados = new Option[listaPostulados.size()];
                for (int i = 0; i < listaPostulados.size(); i++) {
                    if (listaPostulados.get(i).getGrupoInvestigacion() != null) {
                        idGrupo = Integer.toString(listaPostulados.get(i).getGrupoInvestigacion().getIdGrupo());
                        nombreProyecto = listaPostulados.get(i).getGrupoInvestigacion().getTituloProyecto();
                        nombreGrupo = listaPostulados.get(i).getGrupoInvestigacion().getNombreGrupo();
                        idPostulado = idGrupo;
                        nombrePostulado = nombreProyecto + " - " + nombreGrupo;
                    }
                    if (listaPostulados.get(i).getPersonas() != null) {
                        idPersona = listaPostulados.get(i).getPersonas().getIdPersona();
                        nombreProyecto = listaPostulados.get(i).getPersonas().getTituloProyecto();
                        nombrePersona = listaPostulados.get(i).getPersonas().getNombrePersona();
                        idPostulado = idPersona;
                        nombrePostulado = nombreProyecto + " - " + nombrePersona;
                    }

                    availableOptionsSeleccionados[i] = new Option(idPostulado, nombrePostulado);
                } // end for
            } else {
                availableOptionsSeleccionados = new Option[1];
                availableOptionsSeleccionados[0] = new Option(0, "La lista esta vacia");
            }
        } catch (Exception e) {
            e.getStackTrace();
        }
    }

    public String buttonIngresarResultados_action() {
        String resultado = "", convocatoria = "", idPostulado = "";
        String[] seleccionados;


        seleccionados = selectedOptionsSeleccionados;
        convocatoria = (String) outputTextIdConvocatoria.getValue();

        if (seleccionados == null || seleccionados.length == 0) {
            error("Por favor seleccione al menos uno.");
            return null;
        } else if (convocatoria == null || convocatoria.equals("")) {
            error("no hay convocatoria asignada.");
            return null;
        }
        for (int i = 0; i < seleccionados.length; i++) {
            try {
                convocatoriasBO = new ConvocatoriasBO();
                convocatoriaVO = new ConvocatoriaVO();
                idPostulado = seleccionados[i];
                convocatoriaVO.setIdConvocatoria(convocatoria);
                resultado = convocatoriasBO.insertarResultadoConvocatoria(convocatoriaVO, Long.parseLong(idPostulado));
                if (!resultado.equals("ingreso")) {
                    error("Error al guardar los datos");
                    return null;
                }


            } catch (ConvocatoriaException ex) {
                Logger.getLogger(Ingresar_resultado_convocatoria.class.getName()).log(Level.SEVERE, null, ex);
                error("Error al guardar los datos");
            }
        }
        info("Los resultados se ingresaron exitosamente");
        llenarListaPostulados(convocatoriaVO);


        return null;
    }

    public String buttonVolver_action() {

        ConvocatoriaVO convocatoriaVO1 = new ConvocatoriaVO();
        convocatoriaId = (String) outputTextIdConvocatoria.getValue();

        convocatoriaVO = new ConvocatoriaVO();
        convocatoriaVO.setIdConvocatoria(convocatoriaId);
        getRequestBean1().setConvocatoriaVO(convocatoriaVO);
        //      setRequestAttribute(convocatoriaId, textFieldIdConvocatoria.getValue());
        return "consultarInvestigacion";
    }

    public static void setRequestAttribute(String attribute, Object object) {
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        request.setAttribute(attribute, object);
    }

    public static Object getRequestAttribute(String attribute) {
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        return request.getAttribute(attribute);
    }
}

